﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
using BusinessTier;
using DataTier;

namespace BookingService
{
    [ServiceContract]
    public interface IBookingService
    {
        [OperationContract]
        void AcceptRoute(Route route, Customer customer, Subscription subscription);

        [OperationContract]
        List<Station> GetAllStations();

        [OperationContract]
        IList<Customer> GetAllCustomers();

        [OperationContract]
        void DeleteCustomerById(int id);

        [OperationContract]
        void UpdateCustomer(int id, string uName, string name, string address, int zip, string email, string password);

        [OperationContract]
        void CreateCustomer(string uName, string name, string address, int zip, string email, string password);

        [OperationContract]
        Battery FindAvailableBattery(int stationId, DateTime bookingDateTime);

        [OperationContract]
        string GetCityFromZip(int zip);

        //[OperationContract]
        //List<Station> GetStations();

        [OperationContract]
        List<Edge> GetAllEdges();

        [OperationContract]
        List<Battery> GetBatteriesInStation(int stationId);

        [OperationContract]
        void AddBatteryToStation(int stationId);

        [OperationContract]
        void CreateStation(string name, string address, int zip);

        [OperationContract]
        void CreateEdge(int fromStation, int toStation, int cost);

        [OperationContract]
        void DeleteStation(int stationId);

        [OperationContract]
        void DeleteEdgeFrom(int stationId);

        [OperationContract]
        void DeleteEdgeTo(int stationId);

        [OperationContract]
        Station FindShortestRoute(int fromZip, int toZip);

        [OperationContract]
        List<Booking> getAllBookings(int sId);

        [OperationContract]
        List<Subscription> GetSubscriptions(int cId);

        [OperationContract]
        Route CalculateRoute(int fromZip, string fromCity, string fromAdress, bool dateIsStart, DateTime date, int toZip, string toCity, string toAdress, Customer customer, Subscription subscription);

        [OperationContract]
        Customer GetCustomerByUserName(string username);

        // TODO: Add your service operations here
    }
}
